package net.android.example;

import net.android.gainer.Gainer;
import net.android.gainer.OnGainerListener;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

/**
 * Gainerを使うサンプルプログラム
 *
 * デバッグ環境での動作確認コードはコメントアウトしてあります．
 * このコードでGainer上のLEDの点灯・消灯，およびタクトスイッチの動作を確認できます．
 * タクトスイッチのチャタは見ていません(^^;)
 * 
 * @author tomo＠android-group.jp
 *
 */
public class GainerSample extends Activity implements OnGainerListener, OnCheckedChangeListener {

	// Gainerオブジェクト
	private Gainer mGainer;
	// Gainerを接続したデバイスのポート名
	private static final String DEVICE = "/dev/ttyUSB0";
	
	private ToggleButton mConnectBtn;
	private ToggleButton mLedBtn;
	private TextView mText;
	
	private boolean mIsConnect = false;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mConnectBtn = (ToggleButton)findViewById(R.id.connect_button);
        mLedBtn = (ToggleButton)findViewById(R.id.led_button);
        mText = (TextView)findViewById(R.id.button_status);
		mText.setTextColor(Color.GREEN);
		mText.setText("Released!");
		
		mConnectBtn.setOnCheckedChangeListener(this);
		mLedBtn.setOnCheckedChangeListener(this);
	}	

	@Override
	protected void onStop() {
		// Gainerとの接続を解除
		if ( mGainer != null ) {
			mGainer.close();
			mGainer = null;
			mIsConnect = false;
		}
		super.onStop();
	}

	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		if ( buttonView == mLedBtn ) {
			if (!mIsConnect) {
				Toast.makeText(this, "Not Connect Gainer", Toast.LENGTH_SHORT).show();
				mLedBtn.setChecked(false);
				return;
			}
			if (isChecked) {
				// Gainer上のLEDを点灯する
				mGainer.turnOnLED();
//			    mGainer.analogOutput(7, 255);
//			    mGainer.analogOutput(4, 0);
//			    mGainer.analogOutput(5, 255);
			} else {
				// Gainer上のLEDを消灯する
				mGainer.turnOffLED();			
//				mGainer.endDigitalInput();
			}
		} else if ( buttonView == mConnectBtn ) {
			if (isChecked) {
				if (mIsConnect) {
					return;
				}
				// Gainerと接続
				mGainer = new Gainer(DEVICE, Gainer.MODE3, true);
//				mGainer.beginDigitalInput( 500 );
				mGainer.setOnGainerListener(this);
				mIsConnect = true;
				Toast.makeText(this, "Connect Gainer", Toast.LENGTH_LONG).show();
			} else {
				// Gainerとの接続を解除
				if ( mGainer != null ) {
//					mGainer.endDigitalInput();
					mGainer.close();
					mGainer = null;
					mIsConnect = false;
					Toast.makeText(this, "Disconnect Gainer", Toast.LENGTH_LONG).show();
				}
			}			
		}
	}	
	
	/**
	 * <p>The event of analog inputting to the gainer executes this method.</p>
	 * <p>Gainerにアナログ入力があったときに実行するメソッド。</p>
	 * @param ains
	 */
	public void gainerAnalogInputUpdated(int[] ains) {
		// TODO Auto-generated method stub
		Log.d("Analog Input ", "in:" + ains[0] + ", " + ains[1] + ", " + ains[2] + ", " + ains[3]);
	}
	
	/**
	 * <p>The event of digital inputting to the gainer executes this method.</p>
	 * <p>Gainerにデジタル入力があったときに実行するメソッド。</p>
	 * @param dins
	 */
	public void gainerDigitalInputUpdated(boolean[] dins) {
		// TODO Auto-generated method stub
		Log.d("Digital Input ", "in: " + dins[0] + ", " + dins[1] + ", " + dins[2] + ", " + dins[3]);
	}

	/**
	 * <p>The event of the gainer's button pressed executes this method.</p>
	 * <p>Gainerのボタンが押されたときに実行するメソッド。</p>
	 */
	public void onPressed() {
		mText.setTextColor(Color.RED);
		mText.setText("Pressed!");
	}

	/**
	 * <p>The event of the gainer's button released executes this method.</p>
	 * <p>Gainerのボタンが離されたときに実行するメソッド。</p>
	 */
	public void onReleased() {
		mText.setTextColor(Color.GREEN);
		mText.setText("Released!");
	}
}